home *** CD-ROM | disk | FTP | other *** search
/ Speccy ClassiX 1998 / Speccy ClassiX 98.iso / amiga_system / the_aminet / dev / gcc / ixemulsrc.lha / ixemul-41.4 / library / ixemul.h < prev    next >
C/C++ Source or Header  |  1995-09-27  |  7KB  |  276 lines

  1. /*
  2.  *  This file is part of ixemul.library for the Amiga.
  3.  *  Copyright (C) 1991, 1992  Markus M. Wild
  4.  *
  5.  *  This library is free software; you can redistribute it and/or
  6.  *  modify it under the terms of the GNU Library General Public
  7.  *  License as published by the Free Software Foundation; either
  8.  *  version 2 of the License, or (at your option) any later version.
  9.  *
  10.  *  This library is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  *  Library General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU Library General Public
  16.  *  License along with this library; if not, write to the Free
  17.  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  *  ixemul.h,v 1.1.1.1 1994/04/04 04:29:38 amiga Exp
  20.  *
  21.  *  ixemul.h,v
  22.  * Revision 1.1.1.1  1994/04/04  04:29:38  amiga
  23.  * Initial CVS check in.
  24.  *
  25.  *  Revision 1.4  1993/11/05  22:14:40  mwild
  26.  *  changes there, here...
  27.  *
  28.  *  Revision 1.3  1992/10/20  16:32:33  mwild
  29.  *  *** empty log message ***
  30.  *
  31.  *  Revision 1.2  1992/07/04  19:25:26  mwild
  32.  *  change __rwport to reflect the current state of the (now global) async port
  33.  *
  34.  * Revision 1.1  1992/05/14  20:36:14  mwild
  35.  * Initial revision
  36.  *
  37.  */
  38.  
  39. #ifndef __IXEMUL_H__
  40. #define __IXEMUL_H__
  41.  
  42. #ifdef START
  43. #include "version.h"
  44.  
  45. /* definitions for the assembler startup file */
  46.  
  47. /* when I've REALLY lots of free time, I'll rewrite header files, but now... */
  48.  
  49. /* amazingly works, contains only defines ;-)) */
  50. #include <exec/alerts.h>
  51.  
  52. #define _LVOOpenLibrary        -0x228
  53. #define _LVOCloseLibrary     -0x19e
  54. #define _LVOAlert        -0x6c
  55. #define _LVOFreeMem        -0xd2
  56. #define _LVORemove        -0xfc
  57.  
  58. #define RTC_MATCHWORD    0x4afc
  59. #define RTF_AUTOINIT    (1<<7)
  60.  
  61. #define LIBF_CHANGED    (1<<1)
  62. #define LIBF_SUMUSED    (1<<2)
  63. /* seems there is an assembler bug in expression evaluation here.. */
  64. #define LIBF_CHANGED_SUMUSED 0x6
  65. #define LIBF_DELEXP    (1<<3)
  66. #define LIBB_DELEXP    3
  67.  
  68. #define LN_TYPE        8
  69. #define LN_NAME        10
  70. #define NT_LIBRARY    9
  71. #define MP_FLAGS    14
  72. #define PA_IGNORE    2
  73.  
  74. #define LIST_SIZEOF    14
  75.  
  76. #define THISTASK    276
  77.  
  78. #define INITBYTE(field,val)    .word 0xe000; .word (field); .byte (val); .byte 0
  79. #define INITWORD(field,val)    .word 0xd000; .word (field); .word (val)
  80. #define INITLONG(field,val)    .word 0xc000; .word (field); .long (val)
  81.  
  82. /*
  83.  * our library base.. 
  84.  */
  85.  
  86. /* struct library */
  87. #define    IXBASE_NODE    0
  88. #define IXBASE_FLAGS    14
  89. #define IXBASE_NEGSIZE    16
  90. #define IXBASE_POSSIZE    18
  91. #define IXBASE_VERSION    20
  92. #define IXBASE_REVISION    22
  93. #define IXBASE_IDSTRING    24
  94. #define IXBASE_SUM    28
  95. #define IXBASE_OPENCNT    32
  96. #define IXBASE_LIBRARY    34    /* size of library */
  97.  
  98. /* custom part */
  99. #define IXBASE_MYFLAGS        (IXBASE_LIBRARY + 0)
  100. #define IXBASE_SYSLIB        (IXBASE_MYFLAGS + 2)
  101. #define IXBASE_SEGLIST        (IXBASE_SYSLIB  + 4)
  102. #define IXBASE_C_PRIVATE    (IXBASE_SEGLIST + 4)
  103. /* get size of C_PRIVATE with print_base_size.c */
  104. #define IXBASE_SIZEOF        (IXBASE_C_PRIVATE + 490)
  105.  
  106. #else  /* C-part */
  107.  
  108. #include <exec/types.h>
  109. #include <exec/libraries.h>
  110. #include <exec/execbase.h>
  111. #include <exec/ports.h>
  112. #include <libraries/dosextens.h>
  113. #include <intuition/intuition.h>
  114.  
  115. #include <sys/types.h>
  116. #ifdef KERNEL
  117. #define _INTERNAL_FILE
  118. #endif
  119. #include <sys/file.h>
  120. #include <sys/param.h>
  121. #include <packets.h>
  122. #include <sys/syscall.h>
  123. #include <signal.h>
  124. #ifdef KERNEL
  125. #include <user.h>
  126. #endif
  127. #include <errno.h>
  128.  
  129. /* configure this to the number of hash queues you like, 
  130.  * use a prime number !!
  131.  */
  132. #define IX_NUM_SLEEP_QUEUES    31
  133.  
  134. struct ixemul_base {
  135.   struct Library    ix_lib;
  136.   unsigned char        ix_myflags;
  137.   unsigned char        ix_pad;
  138.   struct ExecBase*    ix_sys_base;
  139.   BPTR            ix_seg_list;
  140.  
  141.   /* needed library bases */
  142.   struct Library    *ix_dos_base;
  143.   struct IntuitionBase    *ix_intui_base;
  144.   struct GfxBase    *ix_gfx_base;
  145.   struct MathIeeeSingBasBase    *ix_ms_base;
  146.   void            *ix_libs;    /* was ix_mst_base */
  147.   struct MathIeeeDoubBasBase    *ix_md_base;
  148.   struct MathIeeeDoubTransBase    *ix_mdt_base;
  149.  
  150.  
  151.   /* the global file table with current size */
  152.   struct file        *ix_file_tab;
  153.   struct file        *ix_fileNFILE;
  154.   struct file        *ix_lastf;
  155.  
  156.   /* size of start of red zone from bottom of stack */
  157.   int            ix_red_zone_size;
  158.  
  159.   struct SignalSemaphore ix_semaph;
  160.   int            ix_membuf_limit;
  161.   
  162.   /* multiplier for id_BytesPerBlock to get to st_blksize, default 64 */
  163.   int            ix_fs_buf_factor;
  164.  
  165.   int            :19,
  166.             ix_do_not_flush_library:1,
  167.             ix_allow_amiga_wildcard:1,
  168.                         ix_no_insert_disk_requester:1,
  169.                         ix_unix_pattern_matching_case_sensitive:1,
  170.                         ix_unix_pattern_matching:1,    /* obsolete */
  171.                         ix_no_ces_then_open_console:1, /* obsolete */
  172.               ix_ignore_global_env:1,
  173.               ix_disable_fibcache:1,
  174.               ix_translate_dots:1,
  175.               ix_watch_stack:1,
  176.             ix_force_translation:1,
  177.               ix_translate_symlinks:1,
  178.             ix_translate_slash:1;
  179.  
  180.   struct MinList    ix_sleep_queues [IX_NUM_SLEEP_QUEUES];
  181.  
  182.   struct MinList    ix_socket_list;
  183.   long                  ix_gmt_offset;
  184. };
  185.  
  186.  
  187. /* this is the only prototype of library functions, that are really used inside
  188.  * the library. (So a user can patch a function, and the library will use
  189.  * the new entry, and not a hard compiled address */
  190. #if 0
  191. int syscall (enum _syscall_ vector, ...);
  192. #else
  193. /* now that gcc can deal with varargs-macros, this can be inlined! */
  194. #define syscall(vec, args...) \
  195.   ({register int (*_sc)()=(void *)(&((char *)ixemulbase)[-((vec)+4)*6]); _sc(args);})
  196. #endif
  197.  
  198. #ifdef KERNEL
  199. extern int ix_panic (const char *msg);
  200. extern struct ixemul_base *ixemulbase;
  201. extern struct user *curproc;
  202. #define ix (*ixemulbase)
  203. #if 0
  204. #define u_save (*(struct user *)((*(struct ExecBase **)4)->ThisTask->tc_TrapData))
  205. #define u (*curproc)
  206. #else
  207. #define u_save (*(struct user *)((*(struct ExecBase **)4)->ThisTask->tc_TrapData))
  208. #define u (*(struct user *)((*(struct ExecBase **)4)->ThisTask->tc_TrapData))
  209. #endif
  210.  
  211. static inline u_int get_usp (void) 
  212.   u_int res;
  213.   asm volatile ("movel    usp,%0" : "=a" (res));
  214.   return res;
  215. }
  216.  
  217. static inline void set_usp (u_int new_usp)
  218. {
  219.   asm volatile ("movel  %0,usp" : /* no output */ : "a" (new_usp));
  220. }
  221.  
  222. static inline u_int get_sp (void) 
  223.   u_int res;
  224.   asm volatile ("movel    sp,%0" : "=a" (res));
  225.   return res;
  226. }
  227.  
  228. static inline void set_sp (u_int new_sp)
  229. {
  230.   asm volatile ("movel  %0,sp" : /* no output */ : "a" (new_sp));
  231. }
  232.  
  233. static inline u_short get_sr (void) 
  234.   u_short res;
  235.   asm volatile ("movew    sr,%0" : "=g" (res));
  236.   return res;
  237. }
  238.  
  239. static inline u_int get_fp (void) 
  240.   u_int res;
  241.   asm volatile ("movel    a5,%0" : "=g" (res));
  242.   return res;
  243. }
  244.  
  245. #define PRIVATE
  246. #include <inline/exec.h>
  247. #undef PRIVATE
  248.  
  249. #define BASE_EXT_DECL
  250. #define BASE_EXT_DECL0
  251. #define BASE_PAR_DECL    
  252. #define BASE_PAR_DECL0    
  253. #define BASE_NAME    ((struct DosLibrary *) ix.ix_dos_base)
  254. #include <inline/dos.h>
  255.  
  256. #define errno (* u.u_errno)
  257. extern struct MsgPort *ix_async_mp;
  258. #define __rwport (ix_async_mp)
  259. #else
  260. #define ix_errno (*((struct user *)(ixbase->ix_sys_base->ThisTask->tc_TrapData))->u_errno)
  261. #endif
  262.  
  263. /* *BLOODY* commododities.h defines IX_VERSION too, so wait for our defines
  264.    to come last, and undef the sucker now!! */
  265. #undef IX_VERSION
  266. #include "version.h"
  267.  
  268. #endif
  269.  
  270.  
  271. #endif
  272.